docs(v4): clarify evaluator transition bridge#3353
Conversation
…econcile v4 availability story - New /docs/compatibility: release timeline (Cloud vs OSS), lifecycle stages, GA versions, and an interactive feature availability matrix (expandable rows per SDK/API/export/eval) built on new MatrixTable/CompatBadge/VersionTimeline components - New /self-hosting/upgrade/deprecations: dated deprecation schedule with the Nov 30, 2026 Cloud migration deadline and server lifecycle - Rework /self-hosting/upgrade/versioning: accurate SDK/server compatibility rule and how Langfuse Cloud is versioned - Reconcile v4 availability wording across v4.mdx, observations/metrics/public API pages, SDK migration guides, and FAQ (Cloud-only -> Langfuse v4, launch by Aug 1, 2026) - Shared components-mdx snippet for SDK minimum server versions; changelog entry Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ity matrix Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… compatibility links Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…vations Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nguage Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Fix unbalanced parentheses in Python v4 / JS v5 detail cells - Reconcile intro with GA framing and distinguish the two Cloud milestones (v4-only experience end of Oct 2026 vs legacy removal Nov 30, 2026) - Clarify VersionTimeline tooltip accordingly - MatrixTable: derive injected Cloud header row colspans from actual column count instead of hard-coding Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Timeline with dated milestones first, then per-situation checklists (Cloud old SDKs, Cloud current SDKs, self-hosted, direct API/OTel), old-to-new mapping table, collapsible Cloud rollout mechanics, and links to the in-app migration view. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Every persona now covers ingestion, read APIs, evaluators, exports, and the Preview UI toggle where applicable. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…n mandate Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…page - MatrixTable: optional persona pills that filter sections/rows, synced with #persona-<id> hash for deep links (auto-scrolls to the matrix) - compatibility.mdx: four personas matching the v4 upgrade page - v4.mdx: persona checklists rendered as Steps, each section links to its pre-filtered compatibility matrix view Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Filters mirror the matrix sections (Python, JS/TS, OpenTelemetry, REST API, exports, evaluations), show a visible-row count, and legacy persona deep-link ids resolve via aliases. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… redundant matrix links Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Step titles are standalone bold paragraphs styled like heading-based step titles (17.5px/500/28px), keeping the TOC clean; fix double counter increment and circular markers from fumadocs defaults. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…gacy removal Aligns with the API deprecation signals (langfuse/langfuse#15168, V3_SUNSET_DATE). The former November 30 removal milestone is merged into the October 31 v4-only switch. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Observations/Metrics API v2 links target their #v2 sections - legacy API references target the new #access-via-sdks anchor - v1 Observations API links to its API reference endpoint - OTel attribute propagation links #propagating-attributes - data model and v4 links target their specific sections - exports step links blob storage, PostHog, and Mixpanel docs - clearer link labels (migration actions in the app, upgrade paths) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Dashed amber milestone line at Oct 31, 2026 with annotation label, data-driven via MARKERS array. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add /docs/api-migration with per-endpoint v3->v4 REST mapping (stable anchors for programmatic use) and a self-contained Legacy v3 API reference page. Move the legacy metrics v1 / daily metrics sections out of metrics-api.mdx, point feature pages at the new pages, convert the human-in-the-loop guide to v2 observations, repoint inbound links, changelog canonicals, and the daily-metrics redirect. Includes fixes from two adversarial review rounds and bot reviews: corrected legacy observation limits, events_only 404 claims scoped to the gated read endpoints (dataset-run reads excepted), parseIoAsJson deprecation, dataset-scoped experiments example. Merge after #3246 (self-hosted v3->v4 upgrade guide): the upgrade-guide links and the Cloud-only callout reconciliation depend on it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…terim) Replace the two forward references to the not-yet-merged v3-to-v4 upgrade guide with links to /docs/v4, making this PR self-contained and link-check green. A small follow-up PR swaps them back and adds the #api-changes cross-link once langfuse-docs#3246 merges. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Cloud-only timeline via new VersionTimeline deployments prop; the compatibility page keeps both deployment rows. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Slug and title change requested in review: the page documents v1/v2 endpoint versions, so "v3" in the name was confusing. Page never shipped, so no redirect needed. All inbound links, canonicals, meta registration, and the daily-metrics redirect updated. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replace concrete cutover and release dates with 'date will follow' wording on the v4 and compatibility pages; restore the self-hosted row in the version timeline with a 'dates will follow' label. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
/docs/compatibility now carries a simplified Langfuse Cloud matrix (v3 deprecated vs v4 GA columns); the detailed per-server-version matrix moves to /self-hosting/upgrade/versioning#sdk-server. Shared row details live in components-mdx/compat/ to avoid drift, and MatrixTable's highlighted column is now a prop. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…te-side pointer - Extract the legacy-endpoint availability rule (Cloud / self-hosted legacy|dual / events_only) into components-mdx/legacy-api-availability.mdx, now shared by the migration guide and the Legacy APIs reference so the two pages can't drift apart. - Standardize the umbrella term on "legacy APIs" (was "legacy v3 API") across legacy-apis, observations-api, and metrics-api; fix the legacy-apis description to include ingestion. - Add a write-side migration pointer from the OpenTelemetry integration page to api-migration#ingestion and legacy-apis#ingestion-v1, mirroring the read-side pointers so ingestion users can discover the migration path. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ence - Rename the pages and slugs: "Legacy APIs" -> "Deprecated APIs" (/docs/api-and-data-platform/features/legacy-apis -> .../deprecated-apis) and "Transitioning to the v4 API" -> "Migration of deprecated APIs" (/docs/api-migration -> /docs/deprecated-api-migration). Decouple the naming from v3/v4. Add redirects for the old URLs (incl. the .md variant). - Reframe the reference intro (deprecated; security patches only, no fixes or new functionality) and restructure the six per-endpoint pointer sections into one "Deprecated endpoints" table plus caveat-only notes for Scores, Dataset runs, and Ingestion. Preserve the #metrics-v1, #daily-metrics, and #ingestion-v1 anchors. Add the v1 scores read endpoints. - Drop the deployment-availability block (covered by the compatibility matrix) and delete the now-unused shared snippet. - Repoint every inbound reference (feature pages, FAQs, changelogs' canonical + body links, OpenTelemetry page, redirects) and align "filtered by" wording across both pages. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Deprecated APIs reference: collapse the six per-endpoint sections into one
endpoints table (now 1:1 with the migration guide's quick reference, incl.
GET /metrics, GET /metrics/daily, and the older synchronous write
endpoints), remove the behavior-note subsections and the Daily Metrics
callout, and add the v4 GET /scores v1 reads.
- Remove events_only / write-mode details everywhere: Sessions and Scores now
simply state they return 404 on Langfuse v4, the "Write-path behavior"
section is deleted, and the dataset-runs and OTEL mentions are cleaned up.
- Style pass on all new prose: drop the repeated "Migrating? See ..." question
pattern from the feature-page callouts in favor of single declaratives,
remove filler ("for tailored data retrieval", "according to your needs",
"not recommended as the default for new data extraction workflows"), and
remove all em dashes from changed files.
- Rename remaining "Legacy" umbrella wording in the migration guide to
"Deprecated" (quick-reference headers, section labels, prose); only literal
identifiers (api.legacy.*, the legacy write mode) remain.
- Fix review findings: 524 FAQ no longer claims the reference page documents
self-hosted availability; OTEL and public-api callouts updated.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Retitle away from the retired Fast Preview framing, replace the conceptual intro with links to /docs/v4#what-changed and the data-model docs, and drop the upgrade checklist, Preview-toggle answer, and FAQ items that duplicate the v4 page and compatibility matrix. URL is unchanged so changelog canonicals and v4-page links keep working. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…to claude/langfuse-versioning-research-a52a58
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…oning-research-a52a58 # Conflicts: # content/docs/metrics/features/metrics-api.mdx
…tep-title color token - detail-read-apis-v2: the delay applies below Python 4.0.0 / JS 5.0.0 (matching observations-api, metrics-api, and the compatibility FAQ), with 4.7.0+/5.4.0+ as the upgrade target - remove the Versions & Compatibility changelog entry for now - use var(--text-primary) directly; hsl() around a hex token is invalid Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The matrix v1-read-APIs detail becomes a routing table (adds the missing dataset-runs row, drops the raw query strings that would drift), the legacy-ingestion detail covers the non-batch POST paths, and the v4 read-APIs step links the migration guide instead of the matrix. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The remaining two instances (sidebar active link, step marker): the token is a hex in both themes, so hsl(var(--text-primary)) is invalid and the color silently fell back to the inherited value. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
@claude review |
There was a problem hiding this comment.
LGTM — small, accurate doc clarification; the one nit flagged inline (OTel/direct-API readers not covered by the new bridge wording) doesn't block merge.
What was reviewed: the updated bridge sentence in step-evaluators.mdx and the corresponding comparison-table row in v4.mdx; confirmed the method names (set_current_trace_io/span.set_trace_io, setActiveTraceIO/span.setTraceIO) match existing deprecated APIs; checked for a md-override counterpart to v4.mdx (none exists, so no sync needed).
Extended reasoning...
Overview
Two-line documentation change: rewords the evaluator-transition guidance in the shared components-mdx/v4/step-evaluators.mdx snippet (rendered across all four v4 upgrade paths) to describe a temporary bridge using deprecated trace I/O methods, and updates one row of the before/after comparison table in content/docs/v4.mdx to match. No code, config, or build logic is touched.
Security risks
None. This is prose-only documentation content; no user input, auth, or executable code paths are affected.
Level of scrutiny
Low. This is a narrow, self-contained doc wording fix stacked on an already-merged v4 docs PR. The only substantive concern — that the new parenthetical naming Python/JS SDK methods doesn't give OTel/direct-API readers an actionable equivalent — was already caught and will be posted as an inline nit. It doesn't misinform that audience (the clause is self-scoped to Python/JS) and doesn't regress prior behavior, so it doesn't warrant blocking.
Other factors
No corresponding md-override file exists for content/docs/v4.mdx, so there's no sync requirement. The PR description notes local prettier/H1 checks were run; given the tiny, text-only diff, that's sufficient without a full build.
| **Evaluators** | ||
|
|
||
| Migrate trace-level LLM-as-a-judge evaluators to the [observation level](/faq/all/llm-as-a-judge-migration). | ||
| Upgrade trace-level LLM-as-a-judge evaluators to the [observation level](/faq/all/llm-as-a-judge-migration). If an existing evaluator reads trace input or output, keep supplying those values with the deprecated trace I/O methods (`set_current_trace_io()` or `span.set_trace_io()` in Python; `setActiveTraceIO()` or `span.setTraceIO()` in JS/TS) until the new evaluator is validated. Any future multi-span support will also use the observation-centric model. |
There was a problem hiding this comment.
🟡 The new bridge sentence in step-evaluators.mdx only mentions Python (set_current_trace_io()/span.set_trace_io()) and JS/TS (setActiveTraceIO()/span.setTraceIO()) methods for keeping trace I/O populated during the evaluator transition, but this shared component is also rendered in the "Direct API and OpenTelemetry users" section, whose readers by definition aren't using either SDK. Consider scoping the parenthetical (e.g. "if you use the Python/JS SDK") or adding a short note for OTel/direct-API users so that audience isn't left assuming an inapplicable method.
Extended reasoning...
components-mdx/v4/step-evaluators.mdx is rendered via <V4StepEvaluators /> in all four upgrade paths on content/docs/v4.mdx, including ### Direct API and OpenTelemetry users [#api-otel] (line ~181). That section's own Ingestion step is explicit that its audience is not using the Langfuse Python/JS SDK — it instructs readers to point a generic OTel span exporter at POST /api/public/otel/v1/traces, with SDK users routed to the separate cloud-older-sdks / cloud-current-sdks sections instead.
The sentence this PR adds says: "If an existing evaluator reads trace input or output, keep supplying those values with the deprecated trace I/O methods (set_current_trace_io() or span.set_trace_io() in Python; setActiveTraceIO() or span.setTraceIO() in JS/TS) until the new evaluator is validated." Walking through the api-otel reader's experience: they land on this Step expecting guidance for their setup, see two method names that are explicitly qualified "in Python"/"in JS/TS", and have no way to apply either one, since they aren't calling into an SDK at all. There's no OTel/API-level equivalent offered (e.g., an attribute name to set on a span via the raw ingestion payload), so this subset of readers gets no actionable instruction for the trace-I/O bridge if they have an existing trace-level evaluator they want to keep working during the transition.
That said, the risk here is genuinely limited, which is why this should not block merge. Before this PR, the shared sentence was just "Migrate trace-level LLM-as-a-judge evaluators to the observation level" — equally generic for all four audiences, with the same link to the migration FAQ. This PR only adds an optional bridging clause for SDK users; it doesn't remove or weaken anything OTel users previously had, and the core instruction (upgrade to observation-level evaluators, see the migration guide) still applies to and works for every audience, including api-otel. The added clause is clearly self-scoped ("in Python", "in JS/TS"), so an OTel reader will recognize it doesn't apply to them rather than being misled into calling a nonexistent method. It's also not obviously fixable within this doc sentence alone — if OTel/direct-API ingestion has no equivalent way to keep trace I/O populated (this looks like a genuine product gap, not a doc omission), the best available fix is to explicitly scope the parenthetical to SDK users, so OTel readers aren't left wondering why it doesn't apply to them, or to add a short pointer to whatever mechanism (if any) exists for raw OTel spans.
Net effect: a documentation completeness gap affecting one of four audiences for an edge case (readers with a pre-existing trace-level evaluator, mid-transition), not an incorrect or misleading instruction. Recommend scoping the parenthetical (e.g. "if you use the Python or JS/TS SDK, keep supplying...") or adding a one-line OTel-specific caveat, but this is a nit rather than a blocking issue.
Summary
set_trace_iowording in the v4 comparison tableStacking
Verification
pnpm exec prettier --experimental-cli --check components-mdx/v4/step-evaluators.mdx content/docs/v4.mdxnode scripts/check-h1-headings.jsgit diff --checkFull build and link checks were not run for this two-line documentation follow-up.
Greptile Summary
This PR clarifies the evaluator transition bridge in the v4 documentation. The main changes are:
Confidence Score: 5/5
This looks safe to merge.
Reviews (1): Last reviewed commit: "docs(v4): clarify evaluator transition b..." | Re-trigger Greptile